home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / pmode / exc_dx02 / demo_3.c < prev    next >
C/C++ Source or Header  |  1994-10-26  |  1KB  |  64 lines

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <pharlap.h>
  6. #include <pldos32.h>
  7. #ifdef __HIGHC__
  8. #include <dos.h>
  9. #endif
  10. #include "exc.h"
  11.  
  12. static char * progName;
  13.  
  14. void Execute(char *path,char *args)
  15. {
  16.   union _REGS r;
  17.   EXEC_BLK    blk;
  18.   char        buf[150],len;
  19.   ULONG       minPages,maxPages;
  20.  
  21.   _dx_cmem_limit(4,&minPages,&maxPages);
  22.  
  23.   strcpy(&buf[1],args);
  24.   len = strlen(args);
  25.   buf[0] = len++;
  26.   buf[len] = 13;
  27.  
  28.   blk.ex_eseg = 0;          /* inherit environment  */
  29.   blk.ex_coff = buf;        /* command line address */
  30.   blk.ex_cseg = SS_DATA;
  31.   r.x.ax = 0x4B00;
  32.   r.x.bx = (UINT)&blk;
  33.   r.x.dx = (UINT)path;
  34.   _intdos(&r,&r);
  35.   if (r.x.cflag & 1)
  36.     printf("Cannot execute child. Error-code %X\n",r.h.al);
  37. }
  38.  
  39. void DemoExcHook (excReg *r)
  40. {
  41.   char buf[150];
  42.   sprintf(buf," /c echo g %04X | 386debug %s",r->EIP,progName);
  43.   Execute(getenv("COMSPEC"),buf);
  44.   exit(1);
  45. }
  46.  
  47. /*-------------------------------------------------*/
  48.  
  49. int main (int argc, char **argv)
  50. {
  51.   char *p = (char*)-1;
  52.  
  53.   if (strcmp("-postdebug",argv[1]) == 0)
  54.   {
  55.     progName = argv[0];
  56.     InstallExcHandler (DemoExcHook,0);
  57.   }
  58.   *p = 0;   /* Causes a crash, exception handler executes debugger */
  59.             /* and cause a new crash here (exception 13)           */
  60.   return 0;
  61. }
  62.  
  63.  
  64.